// ++++++++++++++++++++++++++++++++++++++++
// 《零基础Go语言算法实战》源码
// ++++++++++++++++++++++++++++++++++++++++
// Author:廖显东（ShirDon）
// Blog:https://www.shirdon.com/
// Gitee:https://gitee.com/shirdonl/goAlgorithms.git
// Buy link :https://item.jd.com/14101229.html
// ++++++++++++++++++++++++++++++++++++++++

package main

import "fmt"

// 联合运算符和类型近似一起使用，没有接口
func Max[T ~int | ~float32 | ~float64](a, b T) T {
	if a > b {
		return a
	}
	return b
}

// TypeInteger 由所有 int 类型组成
type TypeInteger interface {
	~int | ~int8 | ~int16 | ~int32 | ~int64
}

// TypeFloat 由所有的float类型组成
type TypeFloat interface {
	~float32 | ~float64
}

// TypeNumber 由TypeInteger和TypeFloat类型组成
type TypeNumber interface {
	TypeInteger | TypeFloat
}

func Min[T TypeNumber](a, b T) T {
	if a < b {
		return a
	}
	return b
}

type Num int

func main() {
	// 创建点类型
	a, b := Num(6), Num(8)

	fmt.Println(Min(a, b))
}

//$ go run generics7.go
//6
